package cn.com.headfree.config;

import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

@Configuration
@EnableSwagger2
public class Swagger2 {

    //http://127.0.0.1:8010/human-manage/swagger-ui.html 原路径
    //http://127.0.0.1:8010/human-manage/doc.html

    /** 设置请求的统一前缀 */
    @Value("${server.servlet.context-path}")
    private String pathMapping;

    //配置Swagger2核心配置
    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)  //指定api类型为swagger2
                // 是否启用Swagger
//                .enable(enabled)
                // 用来创建该API的基本信息，展示在文档的页面中（自定义展示的信息）
                .apiInfo(apiInfo())
                // 设置哪些接口暴露给Swagger展示
                .select()
                // 扫描所有有注解的api，用这种方式更灵活
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                // 扫描指定包中的swagger注解
                // .apis(RequestHandlerSelectors.basePackage("com.hz.project.tool.swagger"))
                // 扫描所有 .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                /* 设置安全模式，swagger可以设置访问token */
//                .securitySchemes(securitySchemes())
//                .securityContexts(securityContexts())
                .pathMapping(pathMapping)
                ;
    }

    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("标题：人力资源数据共享系统_接口文档")                         //文档页标题
                .contact(new Contact("恒卓科技",                  //联系人信息
                        null,
                        null))
                .description("描述：用于管理宣城电力公司的人员信息,具体包括XXX,XXX模块...")                  //描述信息
                .version("版本号:1.0.1")                                      //文档版本号
                .termsOfServiceUrl("")      //网站地址
                .build();
    }

}
